<?php

/**
 * Класс авторизации служит для входа в систему
 * админа, рекламодателей и публикаторов.
 * У каждой роли свой экшен для авторизации.
 */
class AuthorizationController extends Zend_Controller_Action 
{
    public function indexAction() {
        $this->_helper->redirector('index', 'index');
    }
    
    /**
     * Авторизация админа.В случае успешной 
     * авторизации - редиректим на главную админки
     */
    public function adminAction() {
        //проверяем авторизирован ли админ
        if (Zend_auth::getInstance()->hasIdentity()) {
            //если да - редиректим на главную админки
            $this->_helper->redirector('index', 'back');            
        }        
        $form = new Application_Form_Authorization();
        $this->view->form = $form;
        
        //получаем и проверяем данные из формы
        if ($this->getRequest()->isPost()) {
              $formData = $this->getRequest()->getPost();
              if ($form->isValid($formData)) {
                  //получаем адаптер подключения к БД
                  $authAdapter = new Zend_Auth_Adapter_DbTable(Zend_Db_Table::getDefaultAdapter());
                  //указываем таблицу и поля в которых следует искать
                  $authAdapter->setTableName('admins')
                          ->setIdentityColumn('login')
                          ->setCredentialColumn('password');
                  //получаем введенные данные
                  $login    = $this->getRequest()->getPost('login');
                  $password = $this->getRequest()->getPost('password');
                  
                  $authAdapter->setIdentity($login)
                          ->setCredential($password);                  
                  //получаем экземпляр класса Zend_Auth
                  $auth = Zend_Auth::getInstance();
                  //делаем попытку авторизировать пользователя
                  $result = $auth->authenticate($authAdapter);
                
               //если авторизация прошла успешно
                  if ($result->isValid()) {       
                       $identity = $authAdapter->getResultRowObject();
                       $obj = new Application_Model_Authorization();                          
                       $id_role = $obj->getAdminIdRole($identity->id);
                       $role = $obj->getRoleName($id_role[0]['id_role']);                                                        
                       //добавляем "Role"
                       $identity->role = $role[0]['name'];                  
                       // получаем доступ к хранилищу данных Zend
                       $authStorage = $auth->getStorage();
                       // помещаем туда информацию о пользователе,
                       // чтобы иметь к ним доступ при конфигурировании Acl
                       $authStorage->write($identity);                     
                       $this->_helper->redirector('admin', 'back'); 
                  }                   
              }
        }
    }
    
    /**
     * Авторизация рекламодателя.В случае успешной 
     * авторизации - редиректим на главную рекламодателя
     */
    public function advertiserAction() {
        //проверяем авторизирован ли админ
        if (Zend_auth::getInstance()->hasIdentity()) {
            //если да - редиректим на главную админки
            $this->_helper->redirector('advertiser', 'pub');             
        }        
        $form = new Application_Form_Authorization();
        $this->view->form = $form;
        
        //получаем и проверяем данные из формы
        if ($this->getRequest()->isPost()) {
              $formData = $this->getRequest()->getPost();
              if ($form->isValid($formData)) {
                  //получаем адаптер подключения к БД
                  $authAdapter = new Zend_Auth_Adapter_DbTable(Zend_Db_Table::getDefaultAdapter());
                  //указываем таблицу и поля в которых следует искать
                  $authAdapter->setTableName('advertisers')
                          ->setIdentityColumn('login')
                          ->setCredentialColumn('password');
                  //получаем введенные данные
                  $login    = $this->getRequest()->getPost('login');
                  $password = md5($this->getRequest()->getPost('password'));
                  
                  $authAdapter->setIdentity($login)
                          ->setCredential($password);                  
                  //получаем экземпляр класса Zend_Auth
                  $auth = Zend_Auth::getInstance();
                  //делаем попытку авторизировать пользователя
                  $result = $auth->authenticate($authAdapter);
                
               //если авторизация прошла успешно
                  if ($result->isValid()) {       
                       $identity = $authAdapter->getResultRowObject();
                       $obj = new Application_Model_Authorization();                          
                       $id_role = $obj->getAdverIdRole($identity->id);
                       $role = $obj->getRoleName($id_role[0]['id_role']);                                                        
                       //добавляем "Role"
                       $identity->role = $role[0]['name'];                  
                       // получаем доступ к хранилищу данных Zend
                       $authStorage = $auth->getStorage();
                       // помещаем туда информацию о пользователе,
                       // чтобы иметь к ним доступ при конфигурировании Acl
                       $authStorage->write($identity);                     
                       $this->_helper->redirector('advertiser', 'adv'); 
                  } 
              }
        }
    }
    
    /**
     * Авторизация публикатора.В случае успешной 
     * авторизации - редиректим на главную публикатора
     */
    public function publisherAction() {
        //проверяем авторизирован ли админ
        if (Zend_auth::getInstance()->hasIdentity()) {
            //если да - редиректим на главную админки
            $this->_helper->redirector('publisher', 'pub');             
        }        
        $form = new Application_Form_Authorization();
        $this->view->form = $form;
        
        //получаем и проверяем данные из формы
        if ($this->getRequest()->isPost()) {
              $formData = $this->getRequest()->getPost();
              if ($form->isValid($formData)) {
                  //получаем адаптер подключения к БД
                  $authAdapter = new Zend_Auth_Adapter_DbTable(Zend_Db_Table::getDefaultAdapter());
                  //указываем таблицу и поля в которых следует искать
                  $authAdapter->setTableName('publishers')
                          ->setIdentityColumn('login')
                          ->setCredentialColumn('password');
                  //получаем введенные данные
                  $login    = $this->getRequest()->getPost('login');
                  $password = md5($this->getRequest()->getPost('password'));
                  
                  $authAdapter->setIdentity($login)
                          ->setCredential($password);                  
                  //получаем экземпляр класса Zend_Auth
                  $auth = Zend_Auth::getInstance();
                  //делаем попытку авторизировать пользователя
                  $result = $auth->authenticate($authAdapter);
                
                  //если авторизация прошла успешно
                  if ($result->isValid()) {       
                       $identity = $authAdapter->getResultRowObject();
                       $obj = new Application_Model_Authorization();                          
                       $id_role = $obj->getPubIdRole($identity->id);
                       $role = $obj->getRoleName($id_role[0]['id_role']);                                                        
                       $identity->role = $role[0]['name'];                  
                       $authStorage = $auth->getStorage();
                       // помещаем туда информацию о пользователе,
                       // чтобы иметь к ним доступ при конфигурировании Acl
                       $authStorage->write($identity);                     
                       $this->_helper->redirector('publisher', 'pub'); 
                  } 
              }
        }
    }
    
    /**
     * выход с аккаунта
     */
    public function logoutAction() {
        Zend_Auth::getInstance()->clearIdentity();
        $this->_helper->redirector('index', 'index');
    }
   
}

?>
